﻿//Auktionshus projekt, DM10X2, Anders Østergaard, Jesper Larsen og Mads Jakobsen, 19.9.2011

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net.Sockets;
using System.Net;
using System.IO;

namespace Klient
{
    public partial class FrmKlient : Form
    {
        StartKlient minKlient;
        int AuktionsStatus = 0; // holder styr på om man er tilmeldt, afmeldt eller byder
        int BeskedNr = 0; //holder styr på hvilekn slags beskeder man får
        Thread lyttetråd;
        private bool LyttetrådKontrol = false;

        string myIP = System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName()).AddressList[0].ToString();
        string vinderIP;
        string gammelIP;
        string serverIp;
        

        public FrmKlient()
        {
            InitializeComponent();
            btnTilmeld.Enabled = false;
            btnAfmeld.Enabled = false;
        }

        public void UdskrivBesked(string ip, string besked)
        {
            if (this.InvokeRequired)// hvis kaldet kom fra GUI-tråd er invoke ikke nådvendig - fx. event pga. ændring i anden form
            {
                this.Invoke(new StartKlient.ModtagBeskedHandler(UdskrivBesked), ip, besked);
            }
            else
            {
                if (BeskedNr == -1) //beytder at der er afmeldbesked
                {
                    txtInfo.Text = besked;
                }
                if (BeskedNr == 0) //beytder at der er velkomstbesked
                {
                    txtInfo.Text = besked;
                }
                if (BeskedNr == 1) //betyder det er auktionsnavn
                {
                    txtAuktionsNavn.Text = besked;
                }
                if (BeskedNr == 2) //betyder det er auktions mindste pris
                {
                    txtBud.Text = besked;
                }
                if (BeskedNr >= 3) //betyder at der nu kommer bud
                {
                    if (besked[0].ToString() == "H" && besked[1].ToString() == "a")
                    {
                        txtAuktioner.Text += besked + "\r\n";
                        if (besked.EndsWith("SOLGT!"))
                        {
                            txtJegByder.Enabled = false;
                            btnByd.Enabled = false;
                            txtAuktioner.Text += "Auktionen er vundet af " + ip + "\r\n";
                            if (ip == myIP)
                            {
                                MessageBox.Show("TILLYKKE du er vinder af auktionen");
                            }                         
                        }
                    }
                    else
                    {
                        try
                        {
                            int bud = Convert.ToInt32(besked); //hvis besked kan laves om til string er det en pris. Der er godkendt
                            txtBud.Text = besked;
                            txtAuktioner.Text = "Nuværende vinder er: " + ip +"\r\n";

                            if (ip == myIP) //Hvis budets IP-adresse er lig klientensIP er budet godkendt!
                            {
                                MessageBox.Show("Buddet er godkendt - Du er nuværende vinder!");
                                btnAfmeld.Enabled = false;
                            }
                            gammelIP = vinderIP;
                            vinderIP = ip;
                            if (myIP == gammelIP && myIP != vinderIP) //Hvis Klientens IP er lig med gammelIP og klientensIP ikke er lig med vinderIP, er man blevet overbudt!
                            {
                                MessageBox.Show("Du er blevet overbudt! - Byd igen!");
                                btnAfmeld.Enabled = true;
                            }
                        }
                        catch (Exception)
                        {
                            if (ip == myIP)
                            {
                                MessageBox.Show(besked); //ellers er det en fejl, dvs at buddet ikke er godkendt (ikke højt nok eller for lavt)
                            }
                        }
                    }
                }
                BeskedNr = BeskedNr + 1;
            }   
        }
        
        private void btnByd_Click(object sender, EventArgs e)
        {
            try
            {
                int pris = Convert.ToInt32(txtJegByder.Text);
                AuktionsStatus = 3;
                int BudAfgivelse = 3; //Case 3 = bud
                minKlient.SendBud(BudAfgivelse.ToString()); //Sender et 3-tal over til severen (case 3), så den begynder at lytte
                string bud = txtJegByder.Text; //Bud-tekstfeltet
                minKlient.SendBud(bud);//Klientens bud bliver sendt over til Sendbud-metoden i startKlient-klassen      
            }
            catch (Exception)
            {

                MessageBox.Show("Budet er indtastet forkert!");
            }
        }

        private void btnTilmeld_Click(object sender, EventArgs e)
        {
            try //Prøver om der kan forbindes til den indtastede IP-adresse. 
            {
                minKlient = new StartKlient(serverIp, 47000); 
                minKlient.ModtagBeskedEvent += new StartKlient.ModtagBeskedHandler(UdskrivBesked);
                Thread lyttetråd = new Thread(minKlient.Besked); //Laver en ny tråd 
                lyttetråd.Start(); //starter lyttetråden
                lyttetråd.IsBackground = true; //Kører lyttetråden i baggrunden
                AuktionsStatus = 1;
                int TilmeldTilAuktion = 1; // 1 = case 1 = tilmeld
                minKlient.SendBud(TilmeldTilAuktion.ToString()); //convert til string, så kan vi benytte samme send metode

                btnAfmeld.Enabled = true;
                btnTilmeld.Enabled = false;
            }
            catch (Exception)
            {

                MessageBox.Show("Der er ikke oprettet en server på denne ip adresse"); //Hvis der ikke kan forbindes til serveren, kommer der en exception.
            }

        }

        private void btnAfmeld_Click(object sender, EventArgs e)
        {
            minKlient.StopSignal();
            txtAuktionsNavn.Clear();
            txtBud.Clear();
            AuktionsStatus = 2; //2 = case 2 = Afmeld
            int AfmeldAuktion = 2; //2 = case 2 = Afmeld
            BeskedNr = -1;
            minKlient.SendBud(AfmeldAuktion.ToString()); //Sender et 2-tal over til serveren
            btnAfmeld.Enabled = false;  //Afmeld-knappe lukkes
            btnTilmeld.Enabled = true; //Tilmeld-knappen åbnes
            
        }

        private void btnGemIP_Click(object sender, EventArgs e)
        {
            serverIp = txtServerIp1.Text + "." + txtServerIp2.Text + "." + txtServerIp3.Text + "." + txtServerIp4.Text; //De 4 felter med tal, bliver lagt sammmen til en IP-adrese
            btnTilmeld.Enabled = true; //Tilmeld-knappen åbnes
            btnAfmeld.Enabled = false; //Afmeld-knappe lukkes
        }


    }
}
